[ÆÁ] HTTP·Î ÆÄÀÏ ´Ù¿î¹Þ±â (WinInet ÀÌ¿ë) ±Û¾´ÀÌ : ¹ÚÁöÈÆ.ÀÓÇÁ (cbuilder) ÀÐÀ½ : 504 2001-08-24 ¿ÀÈÄ 5:48:30 ÀÓÇÁ¶ø´Ï´Ù. ´ÙÀ½Àº IEÀÇ ÀϺηΠÀ©µµ¿ìÁîÀÇ ¸ðµç ¹öÀü¿¡ ¼³Ä¡µÇ¾î ÀÖ´Â WinInet API¸¦ ÀÌ¿ëÇÏ¿© À¥ »óÀÇ ÆÄÀÏÀ» ´Ù¿î¹Þ´Â ¼Ò½ºÀÔ´Ï´Ù. ¿¾³¯¿¡ ÀÛ¼ºÇÑ °Å¶ó¼­ ±â¾ïÀÌ °¡¹°°Å¸®Áö¸¸, MSDN¿¡¼­ ±Ü¾î¿Â °ÍÀ» ¾à°£ ¼öÁ¤ÇÑ °Í °°³×¿ä. //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" #include "wininet.h" // WinInet Çì´õ ÀÎŬ·çµå //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #pragma link "wininet.lib" // WinInet ¶óÀ̺귯¸® ¸µÅ© TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- bool __fastcall GetHttpFile(AnsiString StrUrl, TStream *Stream) { Stream->Position = 0; HINTERNET ISession = InternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); HINTERNET HttpFile = InternetOpenUrl(ISession, StrUrl.c_str(), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0); AnsiString UrlBuff; UrlBuff.SetLength(1024); DWord BuffSize = 1024; if(HttpQueryInfo(HttpFile, HTTP_QUERY_CONTENT_LOCATION, UrlBuff.c_str(), &BuffSize, NULL)==false) { switch(GetLastError()) { case ERROR_INSUFFICIENT_BUFFER: UrlBuff.SetLength(BuffSize+1); HttpQueryInfo(HttpFile, HTTP_QUERY_CONTENT_LOCATION, UrlBuff.c_str(), &BuffSize, 0); break; case ERROR_HTTP_HEADER_NOT_FOUND: UrlBuff = StrUrl; break; default: InternetCloseHandle(HttpFile); return false; } } char FileSizeBuff[4]; BuffSize = sizeof(FileSizeBuff); bool bSizeIsKnown = HttpQueryInfo(HttpFile, HTTP_QUERY_CONTENT_LENGTH, &FileSizeBuff, &BuffSize, NULL); bool Result; DWord FileSize; if(bSizeIsKnown) { FileSize = atol(FileSizeBuff); TMemoryStream *ms; ms = dynamic_cast(Stream); if(ms == NULL) ms = new TMemoryStream; ms->Size = FileSize; DWord ByteRead; Result = InternetReadFile(HttpFile, ms->Memory, FileSize, &ByteRead); if(Result) Stream->CopyFrom(ms, 0); if(ms != Stream) delete ms; } else { void *Buffer = new char[2048]; FileSize = 2048; DWord ByteRead; while(true) { Result = InternetReadFile(HttpFile, Buffer, FileSize, &ByteRead); if(ByteRead == 0) break; Stream->WriteBuffer(Buffer, ByteRead); } delete Buffer; } InternetCloseHandle(HttpFile); InternetCloseHandle(ISession); return Result; } void __fastcall TForm1::Button1Click(TObject *Sender) { TStringStream *ss = new TStringStream(""); AnsiString StrUrl = UrlEdit->Text; if(GetHttpFile(UrlEdit->Text, ss)) RichEdit1->Lines->Text = ss->DataString; else ShowMessage("Error"); delete ss; } ÀÌ ¼Ò½ºÀÇ GetHttpFile() ÇÔ¼ö´Â ù¹øÂ° ÀÎÀÚ¸¦ ¾È½Ã½ºÆ®¸µ Æ÷¸ËÀÇ URL, ±×¸®°í µÎ¹øÂ° ÀÎÀڷμ­ ½ºÆ®¸² Ŭ·¡½º¸¦ ¹Þµµ·Ï µÇ¾îÀÖ½À´Ï´Ù. ´Ù¿î¹ÞÀ» ÆÄÀÏÀÌ HTMLÀ̳ª ÅØ½ºÆ®µî ÅØ½ºÆ® Æ÷¸ËÀÌ¸é ¿¹¿¡¼­ º¸ÀÎ °Íó·³ TStringStreamÀ» ¾²´Â °ÍÀÌ ÆíÇÒ °ÍÀ̰í, ¹ÙÀ̳ʸ® ÆÄÀÏÀ̶ó¸é TFileStreamÀ» ¾²´Â °ÍÀÌ ÁÁÀ» °Ì´Ï´Ù. ±×·³ À̸¸...